home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / man / AWK < prev    next >
Text File  |  1994-08-05  |  4KB  |  222 lines

  1. #
  2.  
  3.  
  4. function underline(s)
  5. { gsub(/./,"_&",s); 
  6.   return s;
  7. }
  8.  
  9.  
  10.  
  11. function header(s)
  12. { print "\n";
  13.   print underline(sprintf("%d. %s", ++count,s)) "\n";
  14. }
  15.  
  16.  
  17. function sub_tex()
  18. { gsub(/\\{/,"kl_auf");
  19.   gsub(/\\}/,"kl_zu");
  20.   gsub(/{/,"");
  21.   gsub(/}/,"");
  22.   gsub("kl_auf", "{");
  23.   gsub("kl_zu", "}");
  24.   gsub(/\$/,"");
  25.   gsub(/\\precond/,"Precondition:");
  26.   gsub(/\\longrightarrow/, "---->");
  27.   gsub(/\\phantom/, "");
  28.   gsub(/\\times/, " x");
  29.   gsub(/\\dots/, "...");
  30.   gsub(/\\cdot/, " *");
  31.   gsub(/\\tilde/,"~");
  32.   gsub(/\\le/,   " <=");
  33.   gsub(/\\ge/,   " >=");
  34.   gsub(/\\neq/,  " !=");
  35.   gsub(/\\ne/,   " !=");
  36.   gsub(/\\bf /, "");
  37.   gsub(/\\nl/, "");
  38.   gsub(/\\/, "");
  39.   gsub(/backslash /, "\\");
  40. }
  41.  
  42.  
  43. BEGIN { operation =  ARGV[2]; 
  44.         type = ARGV[1];
  45.         gsub(/\/.*\//, "",type);
  46.         gsub(/\.tex/, "",type);
  47.         ARGV[2] = ""; 
  48.         gsub(/_/, "\\_", operation); print " "; 
  49.         op_header = 0;
  50.        }
  51.  
  52.  
  53. /\{\\magonebf/ { 
  54. if (operation == "")
  55.  { gsub(/\{\\magonebf /, "");
  56.    gsub(/\}/, "");
  57.    gsub(/\\/, "");
  58.    print underline($0);
  59.    print " ";
  60.   }
  61. }
  62.  
  63. /Definition/ { 
  64. if (operation == "" || "definition" == operation)
  65.  { if (operation == "") header("DEFINITION");
  66.     getline;
  67.     while ($1 == "") getline;
  68.     while ($1 !~ "skip" && $1 != "")
  69.       { gsub(/\\name/,type);
  70.         sub_tex();
  71.         print;
  72.         getline; 
  73.        }
  74.     print " ";
  75.   }
  76. }
  77.  
  78. /\\decl/ { 
  79.  
  80.   gsub(/\\/, "");
  81.   if ($1 == "decl")
  82.       type = $2"<"$3">";
  83.   else
  84.      if ($1 == "decltwo")
  85.        type = $2"<"$3","$4">";
  86.      else
  87.         if ($1 == "declthree")
  88.           type = $2"<"$3","$4","$5">";
  89.  
  90. }
  91.  
  92.  
  93. /\\create/ { 
  94.   out = 0;
  95.   if (operation == "" || "creation" == operation) 
  96.   { out = 1
  97.     if (operation == "") header("CREATION");
  98.    }
  99.  
  100.   while ($0 ~ "\\\\create") 
  101.   { i = 1;
  102.     while ($i != "\\create") i++;
  103.     i++;
  104.     var = $i; 
  105.     gsub(/\\create/, type);
  106.     gsub(/\{\}/, "");
  107.     gsub(/\\/, "");
  108.     if (out==1) printf("%s;\n\n",$0);
  109.     getline;
  110.     while ($1 == "") getline;
  111.   }
  112.  
  113.  
  114.   if (out==1) 
  115.   { while ($1 !~ "skip") # && $1 != ""
  116.     { gsub(/{/,"");
  117.       gsub(/}/,"");
  118.       gsub(/\\tt /, "");
  119.       gsub(/\$/,"");
  120.       gsub(/\\name/,type);
  121.       gsub(/\\var/,var);
  122.       gsub(/\\precond/, "Precondition:");
  123.       gsub(/\\/,"");
  124.       print;
  125.       getline; 
  126.      }
  127.    print " ";
  128.   }
  129. }
  130.  
  131.  
  132. #operations & operators: line starts with \+\op
  133.  
  134. /\\\+\\op/ {
  135. if ($3 == operation || operation == "" || "operations" == operation)
  136.   if (op_header==0) { if (operation == "") header("OPERATIONS"); 
  137.                       op_header=1; 
  138.                      }
  139.   gsub(/}/,"");
  140.   gsub(/{/,"");
  141.  
  142.   sub_tex();
  143.  
  144.   if ($1 == "+op") #operation
  145.    { printf("%-9s %s.%s (",$2,var,$3);
  146.      for (i=4;i<=NF;i++) printf("%s ",$i);
  147.      printf(")");
  148.     }
  149.   else
  150.      if ($1 == "+opb") #binary operator
  151.       { printf("%-9s %s ",$2,var);
  152.         for (i=3;i<=NF;i++) printf("%s ",$i);
  153.        }
  154.      else  
  155.         if ($1 == "+ops") #stream operator
  156.          { printf("%-9s %s %s %s",$2,$4,$3,var);
  157.            for (i=5;i<=NF;i++) printf("%s ",$i);
  158.           }
  159.         else
  160.            if ($1 == "+opf") #function call operator  
  161.            { printf("%-9s %s (",$2,var);
  162.              for (i=3;i<NF;i++) printf("%s ",$i);
  163.              printf("%s)",$i);
  164.             }
  165.            else
  166.              if ($1 == "+opu") #unary operator
  167.                printf("%-9s %s%s",$2,$3,var);
  168.              else
  169.              if ($1 == "+opa") #array access operator
  170.                printf("%-9s %s [%s %s]",$2,var,$3,$4);
  171.  
  172.   print " ";
  173.   getline;
  174.   if ("operations" != operation)
  175.   { print " ";
  176.     while ($1 !~ "skip" && $1 != "")
  177.     { start = 1;
  178.       if ($1 == "\\+\\nop") start = 2;
  179.       printf("                      ");
  180.       gsub(/\\var/, var);
  181.       sub_tex();
  182.       for (i=start;i<=NF;i++) printf("%s ",$i);
  183.       print " ";
  184.       getline; 
  185.      }
  186.    print " ";
  187.   }
  188. }
  189. }
  190.  
  191. /Iteration/ { 
  192. if (operation == "" || "iteration" == operation) 
  193. { if (operation == "") header("ITERATION");
  194.   getline;
  195.   while ($1  ~ "skip" || $1 == "") getline;
  196.   while ($1 !~ "skip")
  197.     { sub_tex();
  198.       print;
  199.       getline; 
  200.       while ($1 ~ "phantom" || $1 == "") getline;
  201.      }
  202.   print " ";
  203. }
  204. }
  205.  
  206. /Implementation/ { 
  207. if (operation == "" || "implementation" == operation) 
  208. { if (operation == "") header("IMPLEMENTATION");
  209.   getline;
  210.   while ($1  ~ "skip" || $1 == "") getline;
  211.   while ($1 !~ "skip" && $1 != "")
  212.     { gsub(/{/,"");
  213.       gsub(/}/,"");
  214.       sub_tex();
  215.       print;
  216.       getline; 
  217.      }
  218.   print " ";
  219. }
  220. }
  221.